﻿-----------------------------------------------------------------------------------------------
--------------------------------------pca.oficinas---------------------------------------------
-----------------------------------------------------------------------------------------------

--Registra Oficina
CREATE OR REPLACE FUNCTION pca.fn_add_oficina(varchar,--empresa_id $1
					      varchar,--oficina_id $2
					      varchar,--nombre $3
					      varchar,--direccion $4
					      varchar --telefono $5
					      )RETURNS void AS
$$
BEGIN
	INSERT INTO pca.oficinas
		(empresa_id,
		oficina_id,
		nombre,
		direccion,
		telefono)
	VALUES
		($1,$2,$3,$4,$5);
END;
$$
LANGUAGE plpgsql;

-- Actualizar Oficina
CREATE OR REPLACE FUNCTION pca.fn_update_oficina(varchar,--empresa_id $1
						 varchar,--oficina_id $2
						 varchar,--nombre $3
						 varchar,--direccion $4
						 varchar,--telefono $5
						 boolean --activo $6
						 ) RETURNS void AS
$$
BEGIN
	UPDATE pca.oficinas SET
		nombre=$3,
		direccion=$4,
		telefono=$5,
		activo = $6
	WHERE
		empresa_id=$1 AND
		oficina_id=$2;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca.fn_del_oficina(varchar,--empresa_id $1
					      varchar --oficina_id $2
					      )RETURNS void AS
$$
BEGIN
	UPDATE pca.oficinas SET
		eliminado = true
	WHERE
		empresa_id=$1 AND
		oficina_id=$2;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca.fn_get_oficina(varchar,--empresa_id $1
					      varchar --oficina_id $2
					      )RETURNS SETOF pca.oficinas AS
$$
DECLARE
	_row pca.oficinas%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			*
		FROM
			pca.oficinas
		WHERE
			empresa_id = $1 AND
			oficina_id = $2 AND
			eliminado = false
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca.fn_get_list_oficina(varchar --empresa_id $1
						   )RETURNS SETOF pca.oficinas AS
$$
DECLARE
	_row pca.oficinas%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			*
		FROM
			pca.oficinas
		WHERE
			empresa_id = $1 AND
			eliminado = false
		ORDER BY
			oficina_id ASC
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca.fn_get_list_oficina(integer,--start $1
						   integer, --limit $2
						   varchar --empresa_id $3
						   )RETURNS SETOF refcursor AS
$$
DECLARE
	cursor_result refcursor;
	cursor_totalrows refcursor;
BEGIN
	OPEN cursor_result FOR
		SELECT
			*
		FROM
			pca.oficinas
		WHERE
			empresa_id=$3 AND
			eliminado = false
		ORDER BY
			oficina_id ASC LIMIT $2 OFFSET $1;
	RETURN NEXT cursor_result;

	OPEN cursor_totalrows FOR
		SELECT
			count(oficina_id)
		FROM
			pca.oficinas
		WHERE
			empresa_id=$3 AND
			eliminado = false;
	RETURN NEXT cursor_totalrows;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca.fn_get_list_oficina(integer,--start $1
						   integer, --limit $2
						   varchar,--empresa_id $3
						   varchar --query $4
						   )RETURNS SETOF refcursor AS
$$
DECLARE
	cursor_result refcursor;
	cursor_totalrows refcursor;
BEGIN
	OPEN cursor_result FOR
		SELECT
			*
		FROM
			pca.oficinas
		WHERE
			empresa_id=$3 AND
			eliminado = false AND
			lower(pca_global.fn_ascii(concat(nombre,direccion))) LIKE '%'|| lower(pca_global.fn_ascii($4)) ||'%' 
		ORDER BY
			oficina_id ASC LIMIT $2 OFFSET $1;
	RETURN NEXT cursor_result;

	OPEN cursor_totalrows FOR
		SELECT
			count(oficina_id)
		FROM
			pca.oficinas
		WHERE
			empresa_id=$3 AND
			eliminado = false AND
			lower(pca_global.fn_ascii(concat(nombre,direccion))) LIKE '%'|| lower(pca_global.fn_ascii($4)) ||'%';
	RETURN NEXT cursor_totalrows;
END;
$$
LANGUAGE plpgsql;